#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "coupcavalier.h"
#include "coupdame.h"
#include "coupfou.h"
#include "couptour.h"
#include "piece.h"
#include "pion.h"
#include "echiquier.h"
#include "couproi.h"
#include "jeu.h"


void voidpartie(struct partie parti, int echiquier[8][8], struct piece piec, int tabretourpiece[30][2])
{
    int nbrecoup=0;
    int i,j,choixdeplacement,ordonnee,abscisse,nouv_pion,test_pion;
    choixdeplacement=0;
    i=0;
    ordonnee=piec.colonne;
    abscisse=piec.ligne;
    test_pion=0;

    if (parti.joueur==0) //c'est au tour du joueur 1 lorsque parti.joueur égale 0
    {

        do
        {
            printf("\nJOUEUR 1 (majuscules) Saisissez votre pièce (sous la forme abscisse ordonnee) : \n");
            scanf("%d %d",&piec.ligne,&piec.colonne); //les coordonnées de la pièce choisie sont enregistrée dans la structure piece

            while (echiquier[piec.ligne][piec.colonne]<=0)  //test si la case choisi contient une pièce appartenant au joueur 1
            {
                printf("\nRessaisissez vos coordonnees comme indiquer precedemment ");
                scanf("%d %d",&piec.ligne,&piec.colonne);


            }

            printf("\nParmi ces déplacements possibles, choisissez celui que vous voulez effectuer. \nPour le premier, par exemple, tapez 0, pour le deuxieme 1, etc...\n");


            if (echiquier[piec.ligne][piec.colonne]==1 or echiquier[piec.ligne][piec.colonne]==-1) //test la nature de la pièce choisie ici si c'est une tour
            {
                couptour(echiquier,piec,tabretourpiece,nbrecoup);/*appelle de la fonction couptour nécéssaire pour inscrire dans le tableau
                                                                   tabretourpiece les coordonnées possibles pour le déplacement*/
                for (i=0; i<nbrecoup;i++)
                {

                    for (j=0;j<2;j++)
                    {
                        printf("%d\t",tabretourpiece[i][j]); //affichage du tableau tabretourpièce
                    }
                    printf("\n");
                }
            }
            else if (echiquier[piec.ligne][piec.colonne]==2 or echiquier[piec.ligne][piec.colonne]==-2)
            {
                coupcavalier(echiquier,piec,tabretourpiece,nbrecoup);
                for (i=0; i<nbrecoup;i++)
                {

                    for (j=0;j<2;j++)
                    {
                        printf("%d\t",tabretourpiece[i][j]);
                    }
                    printf("\n");
                }
            }
            else if (echiquier[piec.ligne][piec.colonne]==3 or echiquier[piec.ligne][piec.colonne]==-3)
            {
                coupfou(echiquier,piec,tabretourpiece,nbrecoup);
                for (i=0; i<nbrecoup;i++)
                {

                    for (j=0;j<2;j++)
                    {
                        printf("%d\t",tabretourpiece[i][j]);
                    }
                    printf("\n");
                }
            }
            else if (echiquier[piec.ligne][piec.colonne]==4 or echiquier[piec.ligne][piec.colonne]==-4)
            {
                couproi(echiquier,piec,tabretourpiece,nbrecoup);
                for (i=0; i<nbrecoup;i++)
                {

                    for (j=0;j<2;j++)
                    {
                        printf("%d\t",tabretourpiece[i][j]);
                    }
                    printf("\n");
                }
            }
            else if (echiquier[piec.ligne][piec.colonne]==5 or echiquier[piec.ligne][piec.colonne]==-5)
            {
                coupdame(echiquier,piec,tabretourpiece,nbrecoup);
                for (i=0; i<nbrecoup;i++)
                {

                    for (j=0;j<2;j++)
                    {
                        printf("%d\t",tabretourpiece[i][j]);
                    }
                    printf("\n");
                }
            }
            else if (echiquier[piec.ligne][piec.colonne]==6 or echiquier[piec.ligne][piec.colonne]==-6)
            {
                couppion(echiquier,piec,tabretourpiece,nbrecoup);
                for (i=0; i<nbrecoup;i++)
                {

                    for (j=0;j<2;j++)
                    {
                        printf("%d\t",tabretourpiece[i][j]);
                    }
                    printf("\n");
                }
            }
            else
                break;
        }
        while (echiquier[piec.ligne][piec.colonne]<=0 or nbrecoup==0 );
        //le joueur 1 ressaisi les coordonnées d'une pièce tant que la case choisi ne contient pas de pièce lui appartenant
        //mais aussi si sa pièce n'a pas de possibilités de mouvement
    }
    else
    {
//tour du joueur 2
        do
        {
            printf("\nJOUEUR 2 (minuscules) Saisissez votre pièce (sous la forme abscisse ordonnee) \n");
            scanf("%d %d",&piec.ligne,&piec.colonne);
            while (echiquier[piec.ligne][piec.colonne]>=0)
            {

                printf("\nRessaisissez vos coordonnees comme indiquer precedemment ");
                scanf("%d %d",&piec.ligne,&piec.colonne);
            }
            if (echiquier[piec.ligne][piec.colonne]==1 or echiquier[piec.ligne][piec.colonne]==-1)
            {
                couptour(echiquier,piec,tabretourpiece,nbrecoup);
                for (i=0; i<nbrecoup;i++)
                {

                    for (j=0;j<2;j++)
                    {
                        printf("%d\t",tabretourpiece[i][j]);
                    }
                    printf("\n");
                }
            }
            else if (echiquier[piec.ligne][piec.colonne]==2 or echiquier[piec.ligne][piec.colonne]==-2)
            {
                coupcavalier(echiquier,piec,tabretourpiece,nbrecoup);
                for (i=0; i<nbrecoup;i++)
                {

                    for (j=0;j<2;j++)
                    {
                        printf("%d\t",tabretourpiece[i][j]);
                    }
                    printf("\n");
                }
            }
            else if (echiquier[piec.ligne][piec.colonne]==3 or echiquier[piec.ligne][piec.colonne]==-3)
            {
                coupfou(echiquier,piec,tabretourpiece,nbrecoup);
                for (i=0; i<nbrecoup;i++)
                {

                    for (j=0;j<2;j++)
                    {
                        printf("%d\t",tabretourpiece[i][j]);
                    }
                    printf("\n");
                }
            }
            else if (echiquier[piec.ligne][piec.colonne]==4 or echiquier[piec.ligne][piec.colonne]==-4)
            {
                couproi(echiquier,piec,tabretourpiece,nbrecoup);
                for (i=0; i<nbrecoup;i++)
                {

                    for (j=0;j<2;j++)
                    {
                        printf("%d\t",tabretourpiece[i][j]);
                    }
                    printf("\n");
                }
            }
            else if (echiquier[piec.ligne][piec.colonne]==5 or echiquier[piec.ligne][piec.colonne]==-5)
            {
                coupdame(echiquier,piec,tabretourpiece,nbrecoup);
                for (i=0; i<nbrecoup;i++)
                {

                    for (j=0;j<2;j++)
                    {
                        printf("%d\t",tabretourpiece[i][j]);
                    }
                    printf("\n");
                }
            }
            else if (echiquier[piec.ligne][piec.colonne]==6 or echiquier[piec.ligne][piec.colonne]==-6)
            {

                couppion(echiquier,piec,tabretourpiece,nbrecoup);
                for (i=0; i<nbrecoup;i++)
                {

                    for (j=0;j<2;j++)
                    {
                        printf("%d\t",tabretourpiece[i][j]);
                    }
                    printf("\n");
                }
            }

            else
                break;
        }
        while (echiquier[piec.ligne][piec.colonne]>=0 or nbrecoup==0);
    }
    do
    {
         printf("\nParmi ces déplacements possibles, choisissez celui que vous voulez effectuer. \nPour le premier, par exemple, tapez 0, pour le deuxieme 1, etc...\n");

        scanf("%d",&choixdeplacement); //le joueur saisi la ligne de coordonnée(parmi tabretourpiece) des choix possibles de la pièce choisi

        if (choixdeplacement<nbrecoup && echiquier[piec.ligne][piec.colonne]==6  && piec.colonne==6 )
        //test si la ligne choisie est existante c'est a dire inférieur a nbrecoup et si le joueur 1 a choisi un pion qui
        //est parvenu à traverser tout l'échiquier auquel cas il peut le remplacer par la pièce de son choix
        {
            printf("\nSaisissez le numéro de la piece par laquelle vous voulez remplacer votre pion \n(attention, vous ne pouvez pas avoir plusieurs rois");
            printf("\n");
            printf("Attention, Les tours sont désignées par le numéro 1 \n Les cavaliers par les numéros 2 \n Les fous par les numéros 3 \n La dame par le numéro 4 \n Les pions par les numéros 6 :");
            scanf("%d",&nouv_pion);
            abscisse=tabretourpiece[choixdeplacement][0]; //on récupère les coordonnées du futur déplacement
            ordonnee=tabretourpiece[choixdeplacement][1];

            echiquier[piec.ligne][piec.colonne]=0; //la coordonnée actuelle est mise à zéro
            echiquier[abscisse][ordonnee]=nouv_pion;//tandis que la case du déplacement prend comme valeur le chiffre correspondant à la pièce choisi
            test_pion=1;
            break; //on sort de la boucle car la séquence de jeu du joueur 1 est terminée

        }

        if  (choixdeplacement<nbrecoup && echiquier[piec.ligne][piec.colonne]==-6  && piec.colonne==1 )
        //idem que ci-dessus pour le joueur 2
        {
            printf("\n");
            printf("Saisissez le numéro la piece par laquelle vous voulez remplacer votre pion \n(attention, vous ne pouvez pas avoir plusieurs rois)");
            printf("\n");
            printf("Attention, Les tours sont désignées par le numéro -1 \n Les cavaliers par les numéros -2 \n Les fous par les numéros -3 \n La dame par le numéro -4 \n Les pions par les numéros -6 :");
            scanf("%d",&nouv_pion);
            abscisse=tabretourpiece[choixdeplacement][0];
            ordonnee=tabretourpiece[choixdeplacement][1];

            echiquier[piec.ligne][piec.colonne]=0;
            echiquier[abscisse][ordonnee]=nouv_pion;
            test_pion=1;
            break;
        }

        if (choixdeplacement<nbrecoup && test_pion==0)
        // initialise le déplacement de la pièce sur l'échiqier
        // la coordonnée de la pièce est mise à zéro et sa nouvelle coordonnée prend la valeur de la pièce
        {


            abscisse=tabretourpiece[choixdeplacement][0];
            ordonnee=tabretourpiece[choixdeplacement][1];
            nouv_pion=echiquier[piec.ligne][piec.colonne];
            echiquier[piec.ligne][piec.colonne]=0;
            echiquier[abscisse][ordonnee]=nouv_pion;
            break;
        }

    }
    while (choixdeplacement>=nbrecoup); //on répète cette séquence tant que l'utilisateur choisi un choix de déplacement impossible

}
